/************************************************/
/*    Auteur    : Yoann NICOD                   */
/*    Programme : Atomic Bomberman Origins      */
/*    Fichier   : gui.cpp                       */
/*    Date      : 16/01/2013                    */
/************************************************/

#include "gui.h"
#include "debug.h"

EvenementGUI::EvenementGUI()
{
	m_TypeEvenementGUI = AUCUN;
	m_pParam = NULL;
}

EvenementGUI::~EvenementGUI()
{
}

ObjetGUI::ObjetGUI()
{
	m_zindex = 0;
	m_PositionXDansLaGUI = 0;
	m_PositionYDansLaGUI = 0;
}

ObjetGUI::~ObjetGUI()
{
}

Color GUI::CouleurTexteDefaut = Color(0,151,251);
Color GUI::CouleurArriereTexteDefaut = Color(0,0,0);
Color GUI::CouleurArrierePlanGUIDefaut = Color(45,45,48);
Color GUI::CouleurBordureGUIDefaut =  Color(0,151,251);

GUI::GUI(RenderWindow *pFenetreRendu, unsigned int Largeur, unsigned int Hauteur) :
	m_ArriereGUI(Largeur, Hauteur)
{
	m_Largeur = Largeur;
	m_Hauteur = Hauteur;
	m_PositionXGlobale = 0;
	m_PositionYGlobale = 0;
	m_pFenetreRendu = pFenetreRendu;

	AjouterObjetGUI(&m_ArriereGUI);
}

GUI::~GUI()
{
//	list<ObjetGUI *>::iterator it;

/*	for(it = m_ListeObjetsGUI.begin(); it != m_ListeObjetsGUI.end(); ++it)
		delete (*it);*/
}

int GUI::AjouterObjetGUI(ObjetGUI *pObjet)
{
	int NouvelID = RechercherIDDisponible();
	if(NouvelID == -1)
	{
		Log("Impossible de creer plus de 512 ObjectGUI dans la GUI", NIVEAU1);
		return -1;
	}
	else
	{
		pObjet->ID = NouvelID;
		m_ListeObjetsGUI.push_back(pObjet);
		m_ListeObjetsGUI.sort();

		return NouvelID;
	}
}

int GUI::RechercherIDDisponible()
{
	list<ObjetGUI*>::iterator it;
	int Tab[512] = {0};

	for(it = m_ListeObjetsGUI.begin(); it != m_ListeObjetsGUI.end(); ++it)
		Tab[(*it)->ID] = 1;

	for(int i = 0; i < 512; ++i)
		if(Tab[i] == 0)
			return i;

	return -1;
}

void GUI::EffectuerRendu()
{
	list<ObjetGUI *>::iterator it;
	unsigned int zindexMax = 0;

	for(it = m_ListeObjetsGUI.begin(); it != m_ListeObjetsGUI.end(); ++it)
		(*it)->EffectuerRendu(m_pFenetreRendu ,m_PositionXGlobale, m_PositionYGlobale);

	return;
}

void GUI::SetPositionXGlobale(unsigned int PositionX)
{
	m_PositionXGlobale = PositionX;
}

void GUI::SetPositionYGlobale(unsigned int PositionY)
{
	m_PositionYGlobale = PositionY;
}

ArriereGUI::ArriereGUI(unsigned int Largeur, unsigned int Hauteur)
{
	m_Largeur = Largeur;
	m_Hauteur = Hauteur;
	m_ShapeArriereGUI = sf::Shape::Rectangle(0, 0, (float)m_Largeur, (float)m_Hauteur, GUI::CouleurArrierePlanGUIDefaut, 1, GUI::CouleurBordureGUIDefaut);
}

ArriereGUI::~ArriereGUI()
{
}

void ArriereGUI::EffectuerRendu(RenderWindow *pFenetreRendu, unsigned int ShiftX, unsigned int ShiftY)
{
	m_ShapeArriereGUI.SetPosition((float)ShiftX, (float)ShiftY);
	pFenetreRendu->Draw(m_ShapeArriereGUI);

	return;
}

ZoneTexte::ZoneTexte(unsigned int Largeur, unsigned int Hauteur)
{
	m_Largeur = Largeur;
	m_Hauteur = Hauteur;
	m_Texte.SetColor(GUI::CouleurTexteDefaut);
	m_ShapeArriereTexte = Shape::Rectangle(0, 0, (float)m_Largeur, (float)m_Hauteur, GUI::CouleurArriereTexteDefaut);
}

ZoneTexte::~ZoneTexte()
{
}

void ZoneTexte::SetTexte(char *pTexte)
{
	m_Texte.SetText(pTexte);
}

void ZoneTexte::SetTaillePolice(float Taille)
{
	m_Texte.SetSize(Taille);
}

void ZoneTexte::SetCouleur(Color Couleur)
{
	m_Texte.SetColor(Couleur);
}

void ZoneTexte::EffectuerRendu(RenderWindow *pFenetreRendu, unsigned int ShiftX, unsigned int ShiftY)
{
	m_Texte.SetPosition((float)(ShiftX + m_PositionXDansLaGUI), (float)(ShiftY + m_PositionYDansLaGUI));
	m_ShapeArriereTexte.SetPosition((float)(ShiftX + m_PositionXDansLaGUI), float(ShiftY + m_PositionYDansLaGUI));

	pFenetreRendu->Draw(m_ShapeArriereTexte);
	pFenetreRendu->Draw(m_Texte);

	return;
}